package com.shujia

object Code14Class {
  def main(args: Array[String]): Unit = {

    val stu = new Stu3()
    stu.skill()

    /**
     *  对于类的继承：
     *     ① 子类可以继承父类中的函数以及属性
     *     ② 子类对父类中的属性进行修改 可以使用this.属性 进行调用
     *     ③ 子类可以重写父类中的函数，但是要求函数名一致，函数的返回值一致，方法体不一样 并且使用override关键字标记
     *     ④ Scala中只能实现单继承，对于多继承可以使用 Trait 进行动态混入
     *     ⑤ 对于父类的调用可以使用 super 同时也可以使用 this
     *     ⑥ 因为满足继承关系，那么可以使用多态进表达 由于对象可以进行类型推断，所以使用多态时，需要手动添加对象类型
     */


    val stu1:Person1 = new Stu3()
    val stu2 = new Stu3()

    stu2.useFun
  }
}


class Person1 extends Monkey {
  var name:String = _

  override def skill(): Unit = {
    println("人类能跑能跳...")
  }

  def eat(): Unit = {
    println("人类需要吃饭...")
  }
}

class Monkey{
  var weight:Int = _

  def skill(): Unit = {
    println("人袁可以爬树...")
  }

}


class Stu3 extends Person1 {
  this.name = "学生"  // 对父类基础的属性进行重新赋值

  override def skill(): Unit = {
    println("学生可以学习技能...")
  }

  def this(_name:String)  {
    this()
    this.name = _name
    super.eat()
    this.eat()
  }

  def useFun(): Unit = {
    Code15Object.fun(4)
  }




}

